const db = uniCloud.database( )
module.exports = {
	_before: function( ) { // 通用预处理器
	},
	/**
	 * add 添加订单
	 * @param {string} user_id 用户id
	 * @param {Object} obj 订单对象
	 * @param {string} obj.create_time 订单时间 默认当前时间
	 * @param {string} obj.orderNumber 系统随机订单号 唯一
	 * @param {Array} obj.cart_list 当前购物车列表
	 * @param {string} obj.address 当前订单用户的配送地址
	 * @param {string} obj.recipient 收件人姓名
	 * @param {string} obj.recipientMobile 收件人电话
	 * @param {Number} obj.tatalPrice 合计商品支付金额
	 * @param {Number} obj.num 订单商品总件数
	 * @param {Number} obj.state 订单状态 0全部 1待付款 2待发货 3待取货 4已完成
	 * @param {Number} obj.countdown 倒计时时间 默认10分钟
	 * @returns {object} 返回订单创建结果
	 */
	async add( user_id, obj ) {
		// 参数校验
		if ( !user_id ) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '当前用户未登录'
			}
		}

		if ( !obj.cart_list || !obj.cart_list.length ) {
			return {
				errCode: 'CART_IS_EMPTY',
				errMsg: '购物车不能为空'
			}
		}

		if ( !obj.address || !obj.recipient || !obj.recipientMobile ) {
			return {
				errCode: 'ADDRESS_IS_NULL',
				errMsg: '收货信息不完整'
			}
		}

		// 设置默认值
		const orderData = {
			user_id,
			create_time: Date.now( ),
			order_no: `ORDER${Date.now()}${Math.random().toString().slice(-6)}`,
			cart_list: obj.cart_list,
			address: obj.address,
			recipient: obj.recipient,
			recipientMobile: obj.recipientMobile,
			tatalPrice: obj.tatalPrice,
			num: obj.num,
			state: obj.state || 1,
			update_time: Date.now( )
		}

		try {
			// 创建订单
			const res = await db.collection( "order" ).add( orderData )

			return {
				errCode: 0,
				errMsg: '订单创建成功',
				order_no: orderData.order_no,
				id: res.id
			}
		} catch ( error ) {
			return {
				errCode: 'CREATE_ORDER_FAIL',
				errMsg: '订单创建失败',
				error: error
			}
		}
	},
	/**
	 * getOrderList 获取订单列表
	 * @param {string} user_id 用户id
	 * @param {number} state 订单状态 0全部 1待付款 2待发货 3待取货 4已完成
	 * @returns {object} 返回订单列表
	 */
	async getOrderList( user_id, state ) {
		// 参数校验
		if ( !user_id ) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '当前用户未登录'
			}
		}

		try {
			let where = {
				user_id
			}
			
			// 修改状态判断逻辑
			// 如果state是数字类型且不等于0，则添加状态条件
			if (typeof state === 'number' && state !== 0) {
				where.state = state
			}

			const res = await db.collection( "order" )
				.where( where )
				.orderBy( 'create_time', 'desc' )
				.get( )

			return {
				errCode: 0,
				errMsg: '获取成功',
				data: res.data
			}
		} catch ( error ) {
			return {
				errCode: 'GET_ORDER_FAIL',
				errMsg: '获取订单失败',
				error
			}
		}
	},
	/**
	 * deleteOrder 删除订单
	 * @param {string} order_no 订单编号
	 * @returns {object} 返回删除结果
	 */
	async deleteOrder(order_no) {
		console.log('接收到删除请求，订单号:', order_no)
		
		if (!order_no) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '订单编号不能为空'
			}
		}

		try {
			// 先查询订单是否存在
			const orderRes = await db.collection("order")
				.where({
					order_no: order_no
				})
				.get()
				
			console.log('查询订单结果:', orderRes)
			
			if (!orderRes.data || orderRes.data.length === 0) {
				return {
					errCode: 'ORDER_NOT_FOUND',
					errMsg: '订单已取消'
				}
			}

			// 执行删除操作
			const dbRes = await db.collection("order")
				.doc(orderRes.data[0]._id)  // 使用文档ID来删除
				.remove()
				
			console.log('删除结果:', dbRes)
			
			if (dbRes.deleted) {
				return {
					errCode: 0,
					errMsg: '删除成功'
				}
			} else {
				return {
					errCode: 'DELETE_FAILED',
					errMsg: '删除失败'
				}
			}
		} catch (error) {
			console.error('删除订单错误:', error)
			return {
				errCode: 'DELETE_ORDER_FAIL',
				errMsg: '删除订单失败',
				error
			}
		}
	},
	/**
	 * updateOrderState 更新订单状态
	 * @param {string} orderId 订单id
	 * @param {number} state 订单状态
	 * @returns {object} 返回更新结果
	 */
	async updateOrderState( order_no, state ) {
		if ( !order_no ) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '订单编号不能为空'
			}
		}

		try {
			await db.collection( "order" )
				.where( { order_no: order_no } )
				.update( {
					state: state,
					update_time: Date.now( )
				} )

			return {
				errCode: 0,
				errMsg: '更新成功'
			}
		} catch ( error ) {
			return {
				errCode: 'UPDATE_ORDER_FAIL',
				errMsg: '更新订单失败',
				error
			}
		}
	},
	/**
	 * getAllOrders 管理员获取所有订单
	 * @param {string} role 用户角色
	 * @param {number} state 订单状态 0全部 1待付款 2待发货 3待取货 4已完成
	 * @returns {object} 返回订单列表
	 */
	async getAllOrders(role, state) {
		// 验证权限
		if (role !== 'admin') {
			throw new Error('无权限访问')
		}

		try {
			let where = {}
			
			// 如果state是数字类型且不等于0，则添加状态条件
			if (typeof state === 'number' && state !== 0) {
				where.state = state
			}

			const res = await db.collection("order")
				.where(where)
				.orderBy('create_time', 'desc')
				.get()

			return {
				errCode: 0,
				errMsg: '获取成功',
				data: res.data
			}

		} catch (error) {
			return {
				errCode: 'GET_ALL_ORDERS_FAIL',
				errMsg: '获取订单失败',
				error
			}
		}
	}
}